#ifndef ARCHIVOLECTURASECUENCIAL_H_
#define ARCHIVOLECTURASECUENCIAL_H_

#include "OutOfBoundException.h"

class ArchivoLecturaSecuencial {
	
	private:

		ArchivoTexto* archivo;
		string* lineaActual;
		int indiceLectura;
		unsigned int numeroLinea;

		ArchivoLecturaSecuencial()
		{
		}

	public:

		ArchivoLecturaSecuencial(string nombre)
		{
			this->archivo = new ArchivoTexto(nombre, ArchivoTexto::LECTURA);
			this->lineaActual = new string();
			this->archivo->leerLinea(*(this->lineaActual));
			*(this->lineaActual) += " ";
			this->numeroLinea = 1;
			this->indiceLectura = 0;
		}

		bool eof(){

			if(this->lineaActual->length() <= this->indiceLectura){
				
				if(!(this->archivo->leerLinea(*(this->lineaActual)))){
					return true;
				}
				*(this->lineaActual) += " ";
				this->numeroLinea++;
				this->indiceLectura = 0;
			}

			return false;
		}

		unsigned int getNumeroLinea(){
			return this->numeroLinea;
		}

		char siguienteCaracter(){

			if(this->lineaActual->size() <= this->indiceLectura){
				if(!this->archivo->leerLinea(*(this->lineaActual))){
					throw new OutOfBoundException();
					}
				*(this->lineaActual) += " ";
				this->numeroLinea++;
				this->indiceLectura = 0;
				}
			
			char c = (*(this->lineaActual))[this->indiceLectura];
			this->indiceLectura = this->indiceLectura + 1;
			return c;
		}

		~ArchivoLecturaSecuencial(void){
			delete this->archivo;
			delete this->lineaActual;
		}
};

#endif